home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Utilities / Workspace / Locus / Source / ItemInsPane.m < prev    next >
Text File  |  1995-06-12  |  6KB  |  283 lines

  1.  
  2. /*
  3.     Copyright 1993  Jeremy Slade.  All rights reserved.
  4. */
  5.  
  6. #import "ItemInsPane.h"
  7.  
  8. #import "ItemCell.h"
  9. #import "SwapView.h"
  10. #import "Globals.h"
  11.  
  12.  
  13. @implementation ItemInsPane
  14.  
  15.  
  16. // -------------------------------------------------------------------------
  17. //   Creating, initializing
  18. // -------------------------------------------------------------------------
  19.  
  20.  
  21. + initialize
  22. {
  23.     [self setVersion:ItemInsPane_VERSION];
  24.     return ( self );
  25. }
  26.  
  27.  
  28.  
  29. - initContent:(const NXRect *)contentRect
  30.     style:(int)aStyle
  31.     backing:(int)bufferingType
  32.     buttonMask:(int)mask
  33.     defer:(BOOL)flag
  34. {
  35.     [super initContent:contentRect
  36.         style:aStyle
  37.         backing:bufferingType
  38.         buttonMask:mask
  39.         defer:flag];
  40.     
  41.     return ( self );
  42. }
  43.  
  44.  
  45.  
  46. - awakeFromNib
  47. /*
  48.     Perform final initializations
  49. */
  50. {
  51.     return ( self );
  52. }
  53.  
  54.  
  55.  
  56. - free
  57. {
  58.     fileTypePane = [fileTypePane free];
  59.     folderTypePane = [folderTypePane free];
  60.     appTypePane = [appTypePane free];
  61.     return ( [super free] );
  62. }
  63.  
  64.  
  65.  
  66. // -------------------------------------------------------------------------
  67. //   General Item stuff
  68. // -------------------------------------------------------------------------
  69.  
  70.  
  71. - (BOOL)canInspect:anObject
  72. {
  73.     return ( [anObject isKindOf:[ItemCell class]] );
  74. }
  75.  
  76.  
  77.  
  78. - showCurrent:sender
  79. {
  80.     [[swapView window] disableFlushWindow];
  81.  
  82.     [pathField setTextDelegate:nil];
  83.     [pathField setStringValue:[target path]];
  84.     [pathField setTextDelegate:self];
  85.     
  86.     [groupLaunchSwitch setState:[target isGroupLaunch]];
  87.     [autoLaunchSwitch setState:[target isAutoLaunch]];
  88.     
  89.     [swapView swap]; // Make sure we have the correct pane for the target type
  90.     switch ( [target fileType] ) {
  91.         case FT_FILE:
  92.             [specificAppSwitch setState:[target hasSpecificApp]];
  93.             [specificAppField setEnabled:[target hasSpecificApp]];
  94.             [specificAppField setTextDelegate:nil];
  95.             [specificAppField setStringValue:[target appName]];
  96.             [specificAppField setTextDelegate:self];
  97.             break;
  98.             
  99.         case FT_SUBDIR:
  100.             [createBrowserSwitch setState:[target createBrowser]];
  101.             [rootedAtField setTextDelegate:nil];
  102.             [rootedAtField setStringValue:[target browserRootedAt]];
  103.             [rootedAtField setTextDelegate:self];
  104.             break;
  105.             
  106.         case FT_APPLICATION:
  107.             [hideIconSwitch setState:[target hideIcon]];
  108.             break;
  109.         
  110.         case FT_UNKNOWN:
  111.             break;    
  112.     }
  113.     
  114.     [[[swapView window] reenableFlushWindow] flushWindow];
  115.     return ( [super showCurrent:self] );
  116. }
  117.  
  118.  
  119.  
  120. - swapPaneFor:sender
  121. {
  122.     switch ( [target fileType] ) {
  123.         case FT_FILE: return ( fileTypePane );
  124.         case FT_SUBDIR: return ( folderTypePane );
  125.         case FT_APPLICATION: return ( appTypePane );
  126.     }
  127.     return ( nil );
  128. }
  129.  
  130.  
  131.  
  132. - changeItemPath:sender
  133. /*
  134. Called by pathField when editing finshes on that field
  135. */
  136. {
  137.     if ( !strlen ( [pathField stringValue] ) ) {
  138.         [pathField selectText:self];
  139.         return ( self );
  140.     }
  141.     
  142.     [target setPath:[pathField stringValue]];
  143.     
  144.     return ( self );
  145. }
  146.  
  147.  
  148.  
  149. - changeItemGroupLaunch:sender
  150. /*
  151. Called by groupLaunchSwitch when it is clicked
  152. */
  153. {
  154.     [target setGroupLaunch:[groupLaunchSwitch state]];
  155.     return ( self );
  156. }
  157.  
  158.  
  159.  
  160. - changeItemAutoLaunch:sender
  161. /*
  162. Called by autoLaunchSwitch when it is clicked
  163. */
  164. {
  165.     [target setAutoLaunch:[autoLaunchSwitch state]];
  166.     return ( self );
  167. }
  168.  
  169.  
  170.  
  171. // -------------------------------------------------------------------------
  172. //   File-type Items
  173. // -------------------------------------------------------------------------
  174.  
  175.  
  176. - changeUseSpecificApp:sender
  177. /*
  178. Called by the specificAppSwitch when it is clicked
  179. */
  180. {
  181.     if ( [specificAppSwitch state] ) {
  182.         [specificAppField setEnabled:YES];
  183.         [specificAppField selectText:self];
  184.     } else {
  185.         [specificAppField setEnabled:NO];
  186.         [target setAppName:NULL];
  187.         [self showCurrent:self];
  188.     }
  189.     
  190.     return ( self );
  191. }
  192.  
  193.  
  194.  
  195. - changeSpecificApp:sender
  196. /*
  197. Called by the specificAppField when editing in the field finishes
  198. */
  199. {
  200.     [target setAppName:[specificAppField stringValue]];
  201.     return ( self );
  202. }
  203.  
  204.  
  205.  
  206. - changeHideIcon:sender
  207. /*
  208. Called by the hideIconSwitch when it is clicked
  209. */
  210. {
  211.     [target setHideIcon:[hideIconSwitch state]];
  212.     return ( self );
  213. }
  214.  
  215.  
  216.  
  217. // -------------------------------------------------------------------------
  218. //   Folder-type items
  219. // -------------------------------------------------------------------------
  220.  
  221.  
  222. - changeCreateBrowser:sender
  223. /*
  224. Called by createBrowserSwitch when it is clicked
  225. */
  226. {
  227.     [target setCreateBrowser:[createBrowserSwitch state]];
  228.     if ( [createBrowserSwitch state] ) {
  229.         const char *s = [rootedAtField stringValue];
  230.         if ( !(s && strlen ( s )) ) [rootedAtField setStringValue:"/"];
  231.         [rootedAtField selectText:self];
  232.     }
  233.     return ( self );
  234. }
  235.  
  236.  
  237.  
  238. - changeRootedAt:sender
  239. /*
  240. Called by rootedAtField when editing finishes in the field
  241. */
  242. {
  243.     [target rootBrowserAt:[rootedAtField stringValue]];
  244.     return ( self );
  245. }
  246.  
  247.  
  248.  
  249. // -------------------------------------------------------------------------
  250. //   Text delegate methods
  251. // -------------------------------------------------------------------------
  252.  
  253.  
  254. - textDidChange:sender
  255. {
  256.     if ( [sender isKindOf:[Text class]] ) sender = [sender delegate];
  257.  
  258.     if ( sender == pathField ) {
  259.     } else
  260.     if ( sender == specificAppField ) {
  261.     } else
  262.     if ( sender == rootedAtField ) {
  263.     }
  264.     return ( self );
  265. }
  266.  
  267.  
  268.  
  269. - textDidEnd:sender endChar:(unsigned short)endChar
  270. /*
  271. Make sure changes made in field get saved.  If the field was exited with a return, then it will automatically send the action (which is where it gets saved).  If the field was exited with a tab, we need to send the action ourselves.
  272. */
  273. {
  274.     if ( [sender isKindOf:[Text class]] ) sender = [sender delegate];
  275.  
  276.     if ( endChar == NX_TAB ) [sender sendAction];
  277.         else [[NXApp mainWindow] makeKeyWindow];
  278.     return ( self );
  279. }
  280.  
  281.  
  282. @end
  283.